package com.dhnsoft.代码随想录.链表;

import java.util.List;

/**
 * ClassName: d04_24_两两交换链表中的节点
 * Package: com.dhnsoft.代码随想录.链表
 * Description:
 *
 * @Author dhn
 * @Create 2024/3/8 15:29
 * @Version 1.0
 */
public class d04_24_两两交换链表中的节点 {

    public static void main(String[] args) {
        LinkedNode singLinked = new LinkedNode();
        ListNode l1 = new ListNode(1);
        ListNode l2 = new ListNode(2);
        ListNode l3 = new ListNode(3);
//        ListNode l4 = new ListNode(4);
        singLinked.add(l1);
        singLinked.add(l2);
        singLinked.add(l3);
//        singLinked.add(l4);
        ListNode listNode = swapPairs(singLinked.getHead());
        System.out.println(listNode);
    }

    public static ListNode swapPairs(ListNode head) {
        if(head==null){
            return null;
        }
        if(head.next == null){
            return head;
        }
        //1.初始化一个虚拟头节点指向head
//        ListNode virHead = new ListNode(-1);
//        virHead.next = head;
        //2.初始化两个节点，一个节点指向虚拟头节点，一个节点指向head
//        ListNode pre = virHead;
//        ListNode cur = virHead.next;
        ListNode pre = head;
        ListNode cur = head.next;
        ListNode next = null;//需要一个节点记录cur节点的next
        while (cur!=null){
            //next节点记录cur节点的下一个节点，方便后续交换
            next = cur.next;
            if(next==null){
                break;
            }
            //3.开始交换，首先是pre的next指向cur的next
            pre.next = cur.next;
            cur.next = next.next;
            next.next = cur;
            pre = cur;
            cur = cur.next;
        }
        return head.next;
    }
}
